// 获取属性类型
function getType(val) {
    return Object.prototype.toString.call(val).slice(8, -1)
}

// 判断字符串中 是否含有表情
function isEmoji(str) {
    let reg = /(\ud83c[\udf00-\udfff])|(\ud83d[\udc00-\ude4f])|(\ud83d[\ude80-\udeff])/g
    return !!str.match(reg)
}

// 判断字符串中 是否含有字符串时间 统一传时间戳格式
function isTimeString(str) {
	let reg = /^\d{4}\/\d{2}\/\d{2}( \d{2}:\d{2}:\d{2})?$/
	let reg2 = /^\d{4}-\d{2}-\d{2}( \d{2}:\d{2}:\d{2})?$/
	const result1 = !!str.match(reg)
	const result2 = !!str.match(reg2)
	return (result1 || result2)
}

// 用于遍历 对象和数组中的属性
function enmuObj(obj) {
    for (let key in obj) {
        let type = getType(obj[key])
        if (type == 'String' && isEmoji(obj[key])) {
            throw new Error('有表情！')
        }
        if (type == 'Array' || type == 'Object') {
            enmuObj(obj[key])
        }
    }
}

function replaceAllTimeStringToTimeStamp(obj) {
  for (let key in obj) {
      let type = getType(obj[key])
      if (type == 'String' && isTimeString(obj[key])) {
        obj[key] = Date.parse(obj[key])
      }
      if (type == 'Array' || type == 'Object') {
        replaceAllTimeStringToTimeStamp(obj[key])
      }
  }
}

// 用于验证obj中是否有属性的值含有表情
function validateParmasHasEmoji(obj) {
    try {
        enmuObj(obj)
    } catch (error) {
        return true
    }
    return false
}

export {
    validateParmasHasEmoji,
	replaceAllTimeStringToTimeStamp
}